<?php
  //分类管理功能
namespace admin\controller;
use \core\ Controller;

class CategoryController extends Controller{

    //显示首页分类

    public function index(){
        //获取数据库信息
        $c= new \admin\model\CategoryModel();
        $categories=$c->getAllCategories();
        //在拿到数据的时候保存到session 无限极分类比较咱计算机内存支援
        $_SESSION['categories']=$categories;
        //显示模板
        $this->display('categoryIndex.html');
    }
    //新增分类显示模板信息
    public function add(){
        //表单中要显示所有分类 判断是否有没有这个分类
        if (!isset($_SESSION['categories'])){
            //获取数据库信息
            $c= new \admin\model\CategoryModel();
            $categories=$c->getAllCategories();
            //在拿到数据的时候保存到session 无限极分类比较咱计算机内存支援
            $_SESSION['categories']=$categories;
        }
        //显示模板信息
        $this->display('categoryAdd.html');
    }
    //新增数据分类技术
    public function insert(){
        //接收数据和
        $c_name=trim($_POST['c_name']);
        $c_parent_id=(int)$_POST['c_parent_id'];
        $c_sort=trim($_POST['c_sort']);
        //合法性验证
        if (empty($c_name)){
            $this->error('<script>alert("分类名称不能为空")</script>','add');
        }
        //判断是否为正整数
        if (!is_numeric($c_sort) || (int)$c_sort!=$c_sort||$c_sort<0||$c_sort>PHP_INT_MAX){
            $this->error('<script>alert("排序必须是整数")</script>','add');
        }
        //有效性验证，当前父分类下是否存在同名的分类
        $c= new  \admin\model\ CategoryModel();
        if ($c->checkCategoryName($c_parent_id,$c_name)){
            //查到了已经存在
            $this->error("<script>alert('当前分类名字:'+{$c_name}+'已经存在')</script>",'add');
        }
        //数据入库
        if ($c->insertCategory($c_name,$c_parent_id,$c_sort)){
            //成功
            $this->success('<script>alert("新增分类成分")</script>','index');
        }else{
            //失败
            $this->error('<script>alert("添加失败")</script>','add');
        }
    }
    //删除分类
    public function delete(){
        //接收数据
        $id=(int)$_GET['id'];
        //判定当前分类是否能删除
        $c= new  \admin\model\ CategoryModel();
        if ($c->getSon($id)){
            //有子类不能删除
            $this->error('<script>alert("当前分类不能删除")</script>','index');
        }
        //有文章不能删除


        //可以删除
        if ($c->deleteById($id)){
            //删除成功
            $this->success('<script>alert("分类删除成功")</script>','index');
        }else{
            //删除失败
            $this->error('<script>alert("分类删除失败")</script>','index');
        }
    }
    //显示要遍及的分类
    public  function edit(){
        //接收数据
        $id=(int)$_GET['id'];
        //有效性验证 验证当前分类是否存在session中 如果存在有效  不存在无效
        if (!array_key_exists($id,$_SESSION['categories'])){
            //不存在
            $this->error('<script>alert("当前分类不存在!")</script>','index');
        }
        //阉割数据
        $c= new \admin\model\CategoryModel();
        $categories=$c->noLimitCategory($_SESSION['categories'],0,0,$id);


        //分配id给模板
        $this->assign('categories',$categories);
        $this->assign('id',$id);
        $this->display('categoryEdit.html');
    }
    //编辑数据更新数据输入库
    public function update(){
        //接收数据：数组接收数据要更新的数据（可能）
        $id=(int)$_POST['id'];
        $data['c_name']=trim($_POST['c_name']);
        $data['c_parent_id']=(int)$_POST['c_parent_id'];
        $data['c_sort']=trim($_POST['c_sort']);
        //合法性验证
        if (empty($data['c_name'])){
            $this->back('<script>alert("分类名称不能为空")</script>');
        }
        //判断是否为正整数
        if (!is_numeric($data['c_sort']) || (int)$data['c_sort']!=$data['c_sort']||$data['c_sort']<0||$data['c_sort']>PHP_INT_MAX){
            $this->back('<script>alert("排序必须是整数")</script>');
        }
//        有效性验证不允许父类下有重名
        $c=new \admin\model\CategoryModel();
        $cat=$c->checkCategoryName($data['c_parent_id'],$data['c_name']);
        //判定
        if ($cat && $cat['id']!=$id){
            //指定的父亲类下有一个同名的子分类
            $this->back('<script>alert("当前分类在指定父分类下已经存在")</script>');
        }
        //输入更新确定数据
        $data=array_diff_assoc($data,$_SESSION['categories'][$id]);
        //判定数据
        if (empty($data)){
            //没有要更新的数据
            $this->error('<script>alert("没有要更新的数据")</script>','index');
        }
        //实现数据更新操作
        if ($c->autoUpdate($id,$data)){
            //更新成功
            $this->success('<script>alert("更新成功")</script>','index');
        }else{
            //失败
            $this->error('<script>alert("更新失败")</script>','index');
        }
    }
}